#/bin/bash
#************************************************#
#                  sibnet.sh                     #
#         автор: kuzyara555@gmail.com            #
#                Август   , 2012                 #
#                                                #
#          Сохраняем популярное видео            #
#           с video.sibnet.ru/rating             #
#************************************************#


#const
onpage=15
period=2
path="."
link="video.sibnet.ru/rating"

#triggers (disable options)
_i=""		#скачать ролик по id
_c=""		#включить кириллицу

cat <<USAGE
Использование: sibnet.sh [-n ШТУК_НА_СТРАНИЦЕ] [-p ПЕРИОД] [-c] ... [КАТАЛОГ_ЗАГРУЗКИ]
  -n [15|50|100]    количество скачиваемых видеороликов
  -p [0|1|2]        топ-лист за выбранный период
                    0=день, 1=неделя, 2=месяц
  -l link           скачать все видео со страницы по адресу link
  -i video_id       скачать видео по id
  -c                писать кириллицу в именах файлов
  КАТАЛОГ_ЗАГРУЗКИ    по умолчанию текущая директория
Например: скачать 50 видеороликов из топа за месяц в домашнюю папку
    sibnet.sh -n50 -p2 ~
USAGE

#разбираем опции
while getopts ":n:p:l:i:c" opt; do
  case "$opt" in
    "l")
      link="$OPTARG" >&2
     ;;
    "c")
      _c=1 >&2
     ;;
    "i")
      _i="$OPTARG" >&2
     ;;
    "n")
      onpage="$OPTARG" >&2
     ;;
    "p")
      period="$OPTARG" >&2
     ;;
    "?")
      echo "Invalid option: -$OPTARG" >&2
      exit 1
     ;;
    ":")
      echo "Option -$OPTARG requires an argument." >&2
      exit 1
     ;;
  esac
done
#разбираем параметр path
for p in "${@:$OPTIND}"; do
  mkdir -p "$p" 2> /dev/null 		#comment or not to comment...
  if [ -d "$p" ]; then
    path="$p"
    break
  else
    exit
  fi
  shift
done
path=`grep -io ".*[^/]" <<< "$path"`        #убираем / на конце
echo "...onpage=$onpage period=$period dir=$path"
#exit


if [ -z $_i ]; then    # читается: если нет опции -i (то парсим страницу)
  echo "...получаем куки"
  wget --save-cookies=/tmp/cookies.txt --keep-session-cookies -q --spider 'video.sibnet.ru/rating'
  echo "...устанавливаем период $period id=0|1|2 (день|неделя|месяц)"
  wget --load-cookies=/tmp/cookies.txt --keep-session-cookies -q --spider --max-redirect=0 "http://video.sibnet.ru/set.php?action=period&id=$period"
  echo "...устанавливаем лимит видео на странице $onpage onpage=15|50|100"
  wget --load-cookies=/tmp/cookies.txt --keep-session-cookies -q --spider --max-redirect=0 "http://video.sibnet.ru/set.php?action=videoonpage&onpage=$onpage"
  echo "...сохраняем получившуюся страницу в /tmp для парсинга"
  wget --load-cookies=/tmp/cookies.txt --keep-session-cookies -q "$link" -O /tmp/video.sibnet.ru.html
  echo "...выдираем список названий видео и id на транслите"
  list=`grep -iroP '(?<=/video)\d+[^/]*(?=/)' /tmp/video.sibnet.ru.html`
  rus_list=( `grep -oP "<a.*?/video\d+.*?/a>" /tmp/video.sibnet.ru.html | iconv -t utf8 -f cp1251 | grep -oP '(?<=alt=").*(?=( - )|")' | sed  's/[/\\*?<>|:"$% ]/_/g'` )
else
  list=$_i
fi
l=`wc -w <<< $list`
echo "Количество роликов: $l "


#echo $rus_list
#exit
echo "Входим в цикл."
for i in $list; do
  let k=k+1
echo "--------File $k of $l ---------"
echo Name: $i
  id=`echo $i | grep -Po "^\d+"`
echo "...получаем ссылку"
  xml=`wget -q "http://video.sibnet.ru/shell_config_xml.php?videoid=${id}&type=video.sibnet.ru" -O - `
  url=`echo $xml | grep -Po "(?<=<file>).*(?=</file>)" | sed 's/amp;//g'`
echo URL: $url
echo "...узнаем размер видео-файла"
  wget -S --spider "$url" -o /tmp/wget.log 
  video_size=`grep -iraoP "(?<=Content-Length: )[0-9]*" /tmp/wget.log | tail -n 1`
echo FileSize: $video_size
    filename="$path/${i}.flv"
    [ $_c ] && filename="$path/${rus_list[$k-1]}.flv"       # если включена опция -с
  if [ -e "$filename" ] && [ $video_size -eq `stat -c%s "$filename"` ]
  then
    echo "Такой файл уже есть! Пропускаем."
  else
    #rm -f $filename
    echo "...cобственно скачивание файла"
    wget -c $url -O "$filename" 
  fi
#exit
done

echo "ГОТОВО!"

